//
//  WRYTabBarController.m
//  BaiSiBuJie
//
//  Created by wry on 16/4/24.
//  Copyright © 2016年 WRY. All rights reserved.
//

#import "WRYTabBarController.h"

#import "WRYEssenceController.h"
#import "WRYNewController.h"
#import "WRYPublishController.h"    
#import "WRYFriendTrendController.h"
#import "WRYMeController.h"

#import "WRYTabBar.h"
#import "WRYNavigationController.h"



@interface WRYTabBarController ()<UITabBarControllerDelegate>
@property(nonatomic,strong) UIViewController * lastSelectVC;

@end

@implementation WRYTabBarController
/*
 问题：
 1.按钮的选中图片被渲染
 1.1 操作图片
 1.2 通过代码
 2.按钮的选中文字被渲染，按钮文字太小
 2.1 按钮的文字 是由对应的子控制器的tabBarItem
 3.中间发布按钮不能显示出来
 3.1 为什么不能显示  1.图片没有显示出来 2.位置不对
 3.2 图片被恶意渲染
 3.3 也是找对应子控制器的tabBarItem
 
 4.发布按钮 状态是高亮，长按的时候 会变颜色
 5.默认tabBar上按钮 只有选中和正常状态，没有高亮状态
 
 tabBar上有多少按钮，就有多少子控制器
 
 6.发布按钮，不是tabBar上按钮,发布控制器也就不是tabBarController子控制器
 
 7.如何实现百思样式tabBar
 总结：如果tabBar上按钮图片太大，默认会被渲染，而且位置也不对
 
 按钮状态：正常，高亮，选中
 高亮：当用户手指长按 按钮 ，按钮状态就会发生改变，只要手指一离开，按钮马上会恢复成正常
 选中：当用户一点击按钮，按钮的状态马上发生改变，而且手指一离开，还是改变的状态，就是选中
 
 8. 让发布按钮，显示到UITabBar上，居中显示
 8.0 自定义TabBar -> 把系统tabBarController的tabBar换成自定义tabBar
 8.1 调整UITabBar上按钮的位置
 8.2 创建UIButton显示发布图片，添加到UITabBar
 
 */

#pragma mark - 设置Tabbar字体颜色
+(void)load
{
//    2.按钮的选中文字被渲染，按钮文字太小
//    2.1 按钮的文字 是由对应的子控制器的tabBarItem
//2.2 颜色 设置选中字体颜色来解决渲染

    //获取当前类型的TabbarItem
    UITabBarItem *item=[UITabBarItem appearanceWhenContainedIn:self, nil];
    //1.设置字体  注意:设置tabBar上按钮字体，只能通过正常状态下
    NSMutableDictionary *dict1=[NSMutableDictionary dictionary ];
    dict1[NSFontAttributeName]=[UIFont boldSystemFontOfSize:13];
    [item setTitleTextAttributes:dict1 forState:(UIControlStateNormal)];

    //2.设置选中字体颜色
    NSMutableDictionary *dict2=[NSMutableDictionary dictionary];
    dict2[NSForegroundColorAttributeName]=[UIColor blackColor];
    [item setTitleTextAttributes:dict2 forState:(UIControlStateSelected)];
}

#pragma mark - viewDidLoad
//移除 不等于控制器的view销毁
- (void)viewDidLoad {
    [super viewDidLoad];
    //1.添加子控制器：有多少个按钮，就有多少个子控制器
    [self addAllChildViewController];
    //2.替换系统tabbar
    [self setTabBar];

    //3.设置代理
    self.delegate=self;
    self.lastSelectVC=[self.childViewControllers firstObject];
}
#pragma mark - UITabBarControllerDelegate
//选中按钮时调用
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if (viewController==_lastSelectVC) {//重复点击tabBar按钮就发出通知,让对应控制器刷新数据

        [[NSNotificationCenter defaultCenter] postNotificationName:WRYRepeatClickTabBarBtnNote object:nil];
    }
    self.lastSelectVC=viewController;

}



#pragma mark - 自定义Tabbar替换系统tabbar
//设置tabbar
-(void)setTabBar
{
    WRYTabBar *tabBar=[[WRYTabBar alloc]init];
    // 把tabBarController的tabBar 换成 自己的tabBar ,kvc
    [self setValue:tabBar forKey:@"tabBar"];
}

/**
 问题：
 1.按钮的选中图片被渲染
    1.1 操作图片
    1.2 通过代码
 2.按钮的选中文字被渲染，按钮文字太小
    2.1 按钮的文字 是由对应的子控制器的tabBarItem
 3.中间发布按钮不能显示出来
    3.1默认tabBar上按钮 只有选中和正常状态，没有高亮状态
    3.2发布按钮 状态是高亮，长按的时候 会变颜色
    3.3发布按钮，不是tabBar上按钮,发布控制器也就不是tabBarController子控制器
    总结：如果tabBar上按钮图片太大，默认会被渲染，而且位置也不对

 */

/**
 0.appearance：只有遵守UIAppearance协议，就能使用appearance方法
 1.所有的控件都能获取到全局对象
 2.通过appearance获取全局对象，可以设置哪些属性（只要有UI_APPEARANCE_SELECTOR宏修饰的属性就可以设置），并不是所有属性都能设置。
 3.为什么通常要在Load方法中使用appearance:appearance必须要在显示之前去设置
 */


#pragma mark - tabbarVC添加所有子控制器
-(void)addAllChildViewController
{
    
    //1.精华 WRYEssenceController
    WRYEssenceController*vc1=[[WRYEssenceController alloc]init];
    [self addOneVC:vc1 normalImageName:@"tabBar_essence_icon" selectImageName:@"tabBar_essence_click_icon" title:@"精华"];
    
    //2.新帖 WRYNewController
    WRYNewController*vc2=[[WRYNewController alloc]init];
    [self addOneVC:vc2 normalImageName:@"tabBar_new_icon" selectImageName:@"tabBar_new_click_icon" title:@"新帖"];
   
    
    //3.站位按钮 ,注意:把按钮状态设置为不能点击;
    UIViewController*vc3=[[UIViewController alloc]init];
    [self addChildViewController:vc3];
    vc3.tabBarItem.enabled=NO;//不要忘记.
    
    //4.关注 WRYFriendTrendController
    
    WRYFriendTrendController*vc4=[[WRYFriendTrendController alloc]init];
    [self addOneVC:vc4 normalImageName:@"tabBar_friendTrends_icon" selectImageName:@"tabBar_friendTrends_click_icon" title:@"关注"];

    
    //5.我  WRYMeController
    // 加载箭头指向控制器
    UIStoryboard *std=[UIStoryboard storyboardWithName:@"WRYMeController" bundle:nil];
    
    WRYMeController*vc5=[std instantiateInitialViewController];
    [self addOneVC:vc5 normalImageName:@"tabBar_me_icon" selectImageName:@"tabBar_me_click_icon" title:@"我"];

}
-(void)addOneVC:(UIViewController *)vc normalImageName:(NSString *)name selectImageName:(NSString *)selName title:(NSString *)title
{
    WRYNavigationController *navc=[[WRYNavigationController alloc]initWithRootViewController:vc];

    vc.navigationItem.title=title;
    
    // 2.设置tabBar上所有按钮的内容:由对应的子控制器的tabBarItem属性决定
    [navc.tabBarItem setImage:[UIImage imageWitnOriginImageNamed:name]];
    [navc.tabBarItem setSelectedImage:[UIImage imageWitnOriginImageNamed:selName]];
     navc.tabBarItem.title=title;
    
    [self addChildViewController:navc];
}
@end
